home *** CD-ROM | disk | FTP | other *** search
/ Software 2000 / Software 2000 Volume 1 (Disc 1 of 2).iso / utilities / u352.dms / u352.adf / Effect.source < prev    next >
Text File  |  1988-10-06  |  11KB  |  492 lines

  1.  
  2. ; This program was written to display an IFF picture with a bit of
  3. ; effect. This was meant for video titles, before the film starts.
  4. ; All it does is load an IFF picture, removes all the compression,
  5. ; sets up the copper list to display another memory area and then
  6. ; quickly poke the picture into that area while it is being shown.
  7. ; It does this by drawing every scanline on every line before it,
  8. ; ie. the bottom (256th) line, is drawn all the way down, then the
  9. ; 255th is drawn on 255 lines, 254th on 254 lines and so on.
  10. ; It waits for a left mouse button press before and after display,
  11. ; so you get a chance to set your video recording/stop it.
  12. ; I hope you find this mildly useful.
  13. ;PS. All good programmers, this was written years ago, and was 
  14. ;part of a much longer program which loaded a batchfile of ppacked
  15. ;pictures and displayed them one at a time. You may therefore find
  16. ;odd bits which don't seem to serve any purpose. These are probably
  17. ;bits of the old program, which I missed when deleting. Sorry.
  18.  
  19.         SECTION COPTEST,CODE_C   
  20.  
  21. OpenLib      equ -552      ;I put all these equs in so that I don't
  22. CloseLib     equ -414      ;have to copy all the include files onto
  23. open        =-30    ;every work disk. If you have one drive
  24. close        =-36    ;you might appreciate this.
  25. mode_old    =1005    
  26. read        =-42
  27. write        =-48
  28. execute        =-222
  29. Bpl1pth        =$e0
  30. Bpl1ptl        =$e2
  31. Bpl2pth        =$e4
  32. Bpl2ptl        =$e6
  33. Bpl3pth        =$e8
  34. Bpl3ptl        =$ea
  35. Bpl4pth        =$ec
  36. Bpl4ptl        =$ee
  37. Bpl5pth        =$f0
  38. Bpl5ptl        =$f2
  39. bplcon0        =$100
  40. bplcon1        =$102
  41. diwstart    =$8e
  42. diwstop        =$90
  43. ddfstart    =$92
  44. ddfstop        =$94
  45. spr0pth        =$120
  46. spr0ptl        =$122
  47. spr1pth        =$124
  48. spr1ptl        =$126
  49. spr2pth        =$128
  50. spr2ptl        =$12a
  51. spr3pth        =$12c
  52. spr3ptl        =$12e
  53. spr4pth        =$130
  54. spr4ptl        =$132
  55. spr5pth        =$134
  56. spr5ptl        =$136
  57. spr6pth        =$138
  58. spr6ptl        =$13a
  59. spr7pth        =$13c
  60. spr7ptl        =$13e
  61. col0        =$180
  62. col1        =$182
  63. col2        =$184
  64. col3        =$186
  65. col4        =$188
  66. col5        =$18a
  67. col6        =$18c
  68. col7        =$18e
  69. col8        =$190
  70. col9        =$192
  71. col10        =$194
  72. col11        =$196
  73. col12        =$198
  74. col13        =$19a
  75. col14        =$19c
  76. col15        =$19e
  77. col16        =$1a0
  78. col17        =$1a2
  79. col18        =$1a4
  80. col19        =$1a6
  81. col20        =$1a8
  82. col21        =$1aa
  83. col22        =$1ac
  84. col23        =$1ae
  85. col24        =$1b0
  86. col25        =$1b2
  87. col26        =$1b4    ;You could delete a few of these colours
  88. col27        =$1b6    ;if you only intend having a 3 or 4 plane
  89. col28        =$1b8    ;picture.
  90. col29        =$1ba
  91. col30        =$1bc
  92. col31        =$1be    
  93.  
  94.         move.l $4,a6
  95.         lea dosname,a1
  96.         moveq.l #0,d0
  97.         jsr openlib(a6)
  98.         move.l d0,dosbase
  99.         beq BasicError
  100.         
  101.         move.l #plane1,d0    ;Initialise Bitplane
  102.         move.w d0,bp1l        ;pointers
  103.         swap d0
  104.         move.w d0,bp1h
  105.         move.l #plane2,d0
  106.         move.w d0,bp2l
  107.         swap d0
  108.         move.w d0,bp2h
  109.         move.l #plane3,d0
  110.         move.w d0,bp3l
  111.         swap d0
  112.         move.w d0,bp3h
  113.         move.l #plane4,d0
  114.         move.w d0,bp4l
  115.         swap d0
  116.         move.w d0,bp4h
  117.         move.l #plane5,d0
  118.         move.w d0,bp5l
  119.         swap d0
  120.         move.w d0,bp5h
  121.  
  122.         Move.l $4,a6           ;Get Copper List
  123.         Lea GFXNAME,a1       ;From library
  124.         Moveq #0,d0           
  125.         jsr OpenLib(a6)       
  126.         Move.l d0,a1           
  127.         Move.l 38(a1),OLD    ;Save OLD list
  128.         Move.l $4,a6           
  129.         jsr CloseLib(a6)         
  130.  
  131.         Move.l #NEW,$dff080     ;Insert our NEW list
  132.  
  133.         move.l #mode_old,d2    ;Load IFF from disk
  134.         move.l #filename,d1    ;into this program.
  135.         bsr openfile
  136.         beq error
  137.         move.l #plane6,d2
  138.         bsr readdata
  139.         move.l d0,d6
  140.         bsr closefile
  141.         
  142. LOOP:        btst #10,$dff016
  143.         beq Error
  144.         btst #6,$bfe001        ;Mouse Wait to show       
  145.               bne.s LOOP        ;the picture.
  146.  
  147. NoMouse:    lea.l Plane1,a0        ;This blanking the planes
  148.         bsr BlankAPlane        ;isn't strictly necessary,
  149.         lea.l Plane2,a0        ;but if you want to display
  150.         bsr BlankAPlane        ;more pictures, this should
  151.         lea.l Plane3,a0        ;be done in between.
  152.         bsr BlankAPlane
  153.         lea.l Plane4,a0
  154.         bsr BlankAPlane
  155.         lea.l Plane5,a0
  156.         bsr BlankAPlane    
  157.  
  158.         moveq.l #0,d0
  159.         lea.l plane6+28,a0
  160.         move.b (a0),d0
  161.         beq error
  162.         move.b d0,planes
  163.         lsl.l #4,d0
  164.         ori.b #$02,d0
  165.         move.b d0,noofbps    ;pokes the number of bit
  166.                     ;planes into Bplcon0 in the
  167.                     ;copper list.
  168.         
  169.         bsr FindFORM        
  170.         add.l #48,a0
  171.         lea.l colour0,a1
  172.         moveq.l #0,d7
  173.         moveq.l #1,d6
  174.         move.b noofbps,d7
  175.         lsr.b #4,d7
  176. NoColsLoop    lsl.b #1,d6
  177.         subq.l #1,d7
  178.         bne.s NoColsLoop
  179.         move.l d6,d7
  180.         bsr FindCMAP
  181.         add.l #4,a0
  182. CMAPloop    moveq.l #0,d0        ;This bit pokes all the
  183.         moveq.l #0,d1        ;colours in the copper
  184.         move.b (a0)+,d0        ;list.
  185.         lsl.l #4,d0
  186.         move.b (a0)+,d0
  187.         move.b (a0)+,d1
  188.         lsr.l #4,d1
  189.         or.b d1,d0
  190.         move.w d0,(a1)+
  191.         add.l #2,a1
  192.         subq.l #1,d7
  193.         bne.s CMAPloop
  194.         
  195.         bsr findBODY        ;Data address in a0
  196.  
  197.         move.l a0,d5
  198.         move.l (a0)+,d7
  199.         add.l d7,d5        ;Put end address in d5
  200.  
  201.         lea.l plane1b,a1    ;This bit actually uncodes
  202.         lea.l plane2b,a2    ;the Iff picture data,
  203.         lea.l plane3b,a3    ;taking out all the runbyte
  204.         lea.l plane4b,a4    ;compression and making
  205.         lea.l plane5b,a5    ;straight bitmaps out of
  206. PlaneLoop:    cmp.l d5,a0        ;the Iff BODY part.
  207.         bge.s DoTotal
  208.         move.l a1,a6
  209.         bsr DoAPlane
  210.         move.l a6,a1
  211.         cmp.b #2,planes
  212.         blt.s PlaneLoop    
  213.         move.l a2,a6
  214.         bsr DoAPlane
  215.         move.l a6,a2
  216.         cmp.b #3,planes
  217.         blt.s PlaneLoop
  218.         move.l a3,a6
  219.         bsr DoAPlane
  220.         move.l a6,a3
  221.         cmp.b #4,planes
  222.         blt.s PlaneLoop
  223.         move.l a4,a6
  224.         bsr DoAPlane
  225.         move.l a6,a4
  226.         cmp.b #5,planes
  227.         blt.s PlaneLoop
  228.         move.l a5,a6
  229.         bsr DoAPlane
  230.         move.l a6,a5
  231.         bra.s PlaneLoop    
  232.                 
  233. DoTotal:    bsr TotalRecall        ;Call the display effect.
  234.  
  235. MouseWait2    btst #6,$bfe001        ;Mouse Wait to return       
  236.               bne.s MouseWait2    ;to DOS.
  237.  
  238. error:        move.l OLD,$dff080    ;Put old copper list back.
  239. BasicError:       rts              ;Return to DOS
  240.  
  241. ;********************Ending Point**********************
  242.  
  243. DoAPlane:    moveq.l #0,d4        ;This bit unpacks a plane
  244. DoMore:        moveq.l #0,d6        ;of BODY data at a time.
  245.         move.b (a0)+,d6
  246.         bpl DoVerb
  247.         bsr Replicate
  248.         bra.s DoneDupl
  249. DoVerb        bsr Verbatim
  250. DoneDupl    cmp.l #40,d4
  251.         blt.s DoMore
  252.         rts
  253.  
  254. Verbatim:    addq.b #1,d6        ;Verbatim means copy 
  255. VerbLoop:    move.b (a0)+,(a6)+    ;direct. It does.
  256.         addq.l #1,d4
  257.         subq.b #1,d6
  258.         bne.s VerbLoop
  259.         rts
  260.  
  261. Replicate:    cmp.b #128,d6        ;Replicate copies a
  262.         beq.s DoneRep        ;string of data a 
  263. Not128:        neg.b d6        ;certain amount of
  264.         addq.b #1,d6        ;times, specified
  265.         cmp.b #128,d6        ;in the BODY data.
  266.         beq.s DoneRep        ;This is the bit
  267.         move.b (a0)+,d0        ;which uncompresses
  268. Reploop:    move.b d0,(a6)+        ;runbyte compression.
  269.         addq.l #1,d4
  270.         subq.b #1,d6
  271.         bne.s RepLoop
  272. DoneRep:    rts
  273.         
  274. FindBODY:    lea.l plane6,a0        ;This searches for
  275. FBLoop:        cmp.b #66,(a0)+        ;the ASCII "BODY"
  276.         bne.s FBloop        ;in the IFF data.
  277.         cmp.b #79,(a0)+
  278.         bne.s FBloop
  279.         cmp.b #68,(a0)+
  280.         bne.s FBloop
  281.         cmp.b #89,(a0)+
  282.         bne.s FBloop
  283.         rts
  284.  
  285. FindCMAP:    lea.l plane6+38,a0    ;This searches for
  286. FMAPLoop:    cmp.b #67,(a0)+        ;the ASCII "CMAP"
  287.         bne.s FMAPLoop        ;in the IFF data.
  288.         cmp.b #77,(a0)+
  289.         bne.s FMAPLoop
  290.         cmp.b #65,(a0)+
  291.         bne.s FMAPLoop
  292.         cmp.b #80,(a0)+
  293.         bne.s FMAPLoop
  294.         rts
  295.  
  296. FindFORM:    lea.l plane6,a0        ;This searches for
  297. FormLoop:    cmp.b #70,(a0)+        ;the ASCII "FORM"
  298.         bne.s FORMLoop        ;in the IFF data.
  299.         cmp.b #79,(a0)+
  300.         bne.s FORMLoop
  301.         cmp.b #82,(a0)+
  302.         bne.s FORMLoop
  303.         cmp.b #77,(a0)+
  304.         bne.s FORMLoop
  305.         sub.l #4,a0
  306.         rts
  307.  
  308. ReadData:    move.l dosbase,a6    ;This reads the data
  309.         move.l filehd,d1    ;from the disk file.
  310.         move.l #$ffffff,d3
  311.         jsr read(a6)
  312.         rts
  313.  
  314. OpenFile:    move.l dosbase,a6
  315.         jsr open(a6)
  316.         move.l d0,filehd
  317.         rts
  318. CloseFile:    move.l dosbase,a6
  319.         move.l filehd,d1
  320.         jsr Close(a6)
  321.         rts
  322.  
  323.  
  324. Delay:        move.l #700000,d1    ;Don't use delays like
  325. DelayLoop:    sub.l #1,d1        ;this, use a CIA timer.
  326.         bne.s DelayLoop        ;You can do this if you
  327.         rts            ;are only doing it for
  328.                     ;your own use, as I was.
  329.                     ;The speed will vary on
  330.                     ;different Amiga models.
  331. BlankAPlane:    move.l #2560,d7
  332. BlankPLoop:    move.l #0,(a0)+
  333.         subq.l #1,d7
  334.         bne.s BlankPLoop
  335.         rts
  336.  
  337. TotalRecall:    lea.l Plane5b+10200,a5    ;This effect was called
  338.         lea.l Plane4b+10200,a4    ;"Total Recall" because
  339.         lea.l Plane3b+10200,a3    ;of the effect used by
  340.         lea.l Plane2b+10200,a2    ;Ocean in the game.
  341.         lea.l Plane1b+10200,a1    ;I called it this, so you
  342.         lea.l Plane5+10200,a0    ;know what I mean.
  343.         move.l #Plane5+10200,CurrentPos
  344.         moveq.l #0,d7
  345.         moveq.l #0,d6
  346.         moveq.l #0,d5
  347.  
  348.         move.w #256,d7        ;Times to do whole screen
  349. PassLoop:    move.w d7,d5        ;No of lines to do
  350.         move.l CurrentPos,a0    ;Current Line address in a0
  351. RasterLoop:    move.b #10,d6        ;No of Longs in each line
  352. LineLoop:    move.l (a5)+,(a0)    ;Do a LongWord in each
  353.         sub.l #20480,a0        ;of destination bitplanes
  354.         move.l (a4)+,(a0)
  355.         sub.l #20480,a0
  356.         move.l (a3)+,(a0)
  357.         sub.l #20480,a0
  358.         move.l (a2)+,(a0)
  359.         sub.l #20480,a0
  360.         move.l (a1)+,(a0)+
  361.         add.l #81920,a0
  362.         subq.b #1,d6
  363.         bne.s LineLoop        ;Done a long in each plane
  364.         sub.l #80,a0        ;Done a line
  365.         sub.l #40,a5
  366.         sub.l #40,a4
  367.         sub.l #40,a3
  368.         sub.l #40,a2
  369.         sub.l #40,a1
  370.         subq.w #1,d5        ;Copy same line all way
  371.         bne.s RasterLoop    ;up screen
  372.         sub.l #40,a5
  373.         sub.l #40,a4
  374.         sub.l #40,a3
  375.         sub.l #40,a2
  376.         sub.l #40,a1
  377.         sub.l #40,CurrentPos    ;Change start line and copy
  378.         subq.w #1,d7        ;upwards to 1 line less
  379.         bne PassLoop
  380.         rts
  381.  
  382. NEW:            dc.w diwstart,$2c81    ;This is our copper list.
  383.         dc.w diwstop,$2cc1
  384.         dc.w ddfstart,$38
  385.         dc.w ddfstop,$d0
  386.         dc.w bplcon0
  387. Noofbps        dc.w $4200
  388.         dc.w bplcon1,$0
  389.  
  390.         dc.w $108,0,$10a,0    ;clears bitplane modulos.
  391.                     ;Only really necessary on
  392.                     ;A1200s/A4000s.
  393.         dc.w col0
  394. Colour0        dc.w $000    ;All these colour values get
  395.         dc.w col1,$fff    ;poked in by earlier code that
  396.         dc.w col2,$fff    ;reads their values from the
  397.         dc.w col3,$fff    ;Iff CMAP block.
  398.         dc.w col4,$fff    ;Changing these fffs won't do 
  399.         dc.w col5,$fff    ;anything.
  400.         dc.w col6,$fff
  401.         dc.w col7,$fff
  402.         dc.w col8,$fff
  403.         dc.w col9,$fff
  404.         dc.w col10,$fff
  405.         dc.w col11,$fff
  406.         dc.w col12,$fff
  407.         dc.w col13,$fff
  408.         dc.w col14,$fff
  409.         dc.w col15,$fff
  410.         dc.w col16,$000
  411.         dc.w col17,$000
  412.         dc.w col18,$000
  413.         dc.w col19,$000
  414.         dc.w col20,$000
  415.         dc.w col21,$000
  416.         dc.w col22,$000
  417.         dc.w col23,$000
  418.         dc.w col24,$000
  419.         dc.w col25,$000
  420.         dc.w col26,$000
  421.         dc.w col27,$000
  422.         dc.w col28,$000
  423.         dc.w col29,$000
  424.         dc.w col30,$000
  425.         dc.w col31,$000
  426.     
  427.         dc.w bpl1pth
  428. Bp1h        dc.w 0
  429.         dc.w bpl1ptl
  430. Bp1l        dc.w 0        
  431.         dc.w bpl2pth
  432. Bp2h        dc.w 0
  433.         dc.w bpl2ptl
  434. Bp2l        dc.w 0        
  435.         dc.w bpl3pth
  436. Bp3h        dc.w 0
  437.         dc.w bpl3ptl
  438. Bp3l        dc.w 0        
  439.         dc.w bpl4pth
  440. Bp4h        dc.w 0
  441.         dc.w bpl4ptl
  442. Bp4l        dc.w 0        
  443.         dc.w bpl5pth
  444. Bp5h        dc.w 0
  445.         dc.w bpl5ptl
  446. Bp5l        dc.w 0        
  447.         dc.w spr0pth,0,spr0ptl,3
  448.         dc.w spr1pth,0,spr1ptl,3
  449.         dc.w spr2pth,0,spr2ptl,3
  450.         dc.w spr3pth,0,spr3ptl,3
  451.         dc.w spr4pth,0,spr4ptl,3
  452.         dc.w spr5pth,0,spr5ptl,3
  453.         dc.w spr6pth,0,spr6ptl,3
  454.         dc.w spr7pth,0,spr7ptl,3
  455.               dc.w $ffff,$fffe        
  456.         
  457.         even
  458.  
  459. PLANE1:        dcb.b 10240,0    ;I don't pretend this is the best
  460. Plane1b:    dcb.b 10240,0    ;way of allocating planes, but it
  461. PLANE2:        dcb.b 10240,0    ;is old code and I couldn't be 
  462. Plane2b:    dcb.b 10240,0    ;bothered to change it all.
  463. PLANE3:        dcb.b 10240,0    ;You should dcb.b 51200 and use
  464. Plane3b:    dcb.b 10240,0    ;plane1+10240, plane1+20480 type
  465. PLANE4:        dcb.b 10240,0    ;address references, but this
  466. Plane4b:    dcb.b 10240,0    ;way you can delete the spare
  467. PLANE5:        dcb.b 10240,0    ;planes if you are only using 3
  468. Plane5b:    dcb.b 10240,0    ;or 4.
  469.  
  470. OLD:          dc.l 0              
  471. Filehd:        dc.l 0
  472. dosbase:    dc.l 0
  473. conhandle:    dc.l 0
  474. CurrentPos:    dc.l 0
  475. FilePoint:    dc.l 0
  476. EndByte:    dc.l 0
  477. Planes:        dc.b 4
  478. DosName:    dc.b "dos.library",0
  479. Gfxname:        dc.b "graphics.library",0
  480.  
  481. Filename:    dc.b "df1:Picture.IFF",0 ;Your picture's filename.
  482.                     ;Only 5 planes (32 cols)
  483.                     ;or less. No HAM*8 JPEGs
  484.                     ;or anything.
  485.         SECTION Source,DATA
  486.         even
  487. PLANE6:        dcb.b 51200,0
  488.  
  489.       END
  490.  
  491.  
  492.